//package com.sj.common.utils;
//
//import com.sj.common.config.CommonProperties;
//import com.sj.common.exception.MbsException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.PostConstruct;
//import java.math.BigDecimal;
//import java.util.List;
//
///**
// * 全局序列工具类
// * @author zhangj
// * @date 2019-07-08
// */
//@Component
//public class IdGeneratorUtil {
//
//    @Autowired
//    private CommonProperties commonProperties;
//
//    private static CommonProperties staticCommonProperties;
//
//    private static String areaCode = null;
//
//    @Autowired
//    private IdGenerator idGenerator;
//    private static IdGenerator idGeneratorUtil;
//    //初始化
//    @PostConstruct
//    public void init() {
//        idGeneratorUtil = this.idGenerator;
//        staticCommonProperties = this.commonProperties;
//    }
//    /**
//     * 默认序列key
//     */
//    private static final String ID_SEQNAME_DEFAULT = "default";
//    /**
//     * 默认序列key
//     */
//    private static final String ID_SEQ_PREFIX = "mbs:seq:";
//    /**
//     * 版本号
//     */
//    private static final String SEQ_DATA_VER = "seq_data_ver";
//    /**
//     * 业务流水号
//     */
//    private static final String BIZSN = "bizsn";
//    /**
//     * 事件流水号
//     */
//    private static final String EVTSN = "evtsn";
//    /**
//     * 事件流水号
//     */
//    private static final String SEQ_RID = "seq_rid";
//
//    /**
//     * 根据seqName获取单个long型id
//     * @param seqName 序列名称
//     * @return long
//     */
///*    public static long getId(String seqName) {
//        long a = idGeneratorUtil.next(ID_SEQ_PREFIX + seqName.toLowerCase());
//        return a;
//    }*/
//
//    /**
//     * 根据seqName获取单个String型id
//     * @param seqName 序列名称
//     * @return String
//     */
//    public static String getStrId(String seqName) {
//        return String.valueOf(getId(seqName));
//    }
//
//    /**
//     * 获取默认long型id序列
//     * @return long
//     */
//    public static long getDefaultId() {
//        return getId(ID_SEQNAME_DEFAULT);
//    }
//
//    /**
//     * 获取默认String型id序列
//     * @return String
//     */
//    public static String getDefaultStrId() {
//        return String.valueOf(getDefaultId());
//    }
//
///*    *//**
//     * 批量获取序列
//     * @param seqName 序列名称
//     * @param size 序列数量
//     * @return List<Object>
//     *//*
//    public static List<Object> getBatchListIds(String seqName, int size) {
//        List<Object> list = idGeneratorUtil.nextList(ID_SEQ_PREFIX + seqName.toLowerCase(), size);
//        return list;
//    }*/
//
//    /**
//     * 批量获取序列,以long数组返回
//     * @param seqName 序列名称
//     * @param size 序列数量
//     * @return long[]
//     */
///*    public static long[] getBatchIds(String seqName,int size) {
//        List<Object> idList = getBatchListIds(seqName, size);
//        long[] ids = new long[size];
//        for (int i = 0; i < idList.size(); i++) {
//            ids[i] = (long) idList.get(i);
//        }
//        return ids;
//    }*/
//
//    /**
//     * 批量获取序列,以String数组返回
//     * @param seqName 序列名称
//     * @param size 序列数量
//     * @return String[]
//     */
//
//    }
//
//
//    /**
//     * 获取固定位数的序列值，不足位数的左添0
//     * @param seqName
//     * @param len
//     * @return
//     */
//    public static String getFixedLenId(String seqName, int len) {
//
//        String seqValue = String.format("%0"+ len + "d", getId(seqName));//
//
//        return seqValue.substring(seqValue.length() - len);
//    }
//    /**
//     * 获取版本号
//     *
//     * @return String
//     */
//    public static String getSeqDataVer() {
//        return getStrId(SEQ_DATA_VER);
//    }
//    /**
//     * 获取默认业务流水号
//     *
//     * @return String
//     */
//    public static String getBisSqu() {
//        return null;
//    }
//    /**
//     * 获取默认事件流水号
//     *
//     * @return String
//     */
//    public static String getEventSqu() {
//        return getStrId(EVTSN);
//    }
//
//    /**
//     * 获取String型rid序列
//     *  RID相关配置/规则：行政区划（6）+时间（YYYYMMDDhhmmss，14）+分组标识（预留，系统编号，2）+全局唯一序列（架构组，8）
//     * @return long
//     */
//    public static String getRid() {
//        StringBuffer sb = new StringBuffer(staticCommonProperties.getRid().getAdmdvs());
//        sb.append(DateUtil.getCurrentDate(DateUtil.TimeFormat.YYYY_MM_DD_HH_MM_SS_BUS)).append(staticCommonProperties.getRid().getGroupId()).append(getFixedLenId(SEQ_RID, 8));
//        return sb.toString();
//    }
//
//    /**
//     * 获取全盟ID保证跟各地区生成不唯一
//     */
//    public static String getMedRid(String admDvs) {
//        StringBuffer sb = new StringBuffer(admDvs);
//        sb.append(DateUtil.getCurrentDate(DateUtil.TimeFormat.YYYY_MM_DD_HH_MM_SS_BUS)).append(staticCommonProperties.getRid().getGroupId()).append(getFixedLenId(SEQ_RID, 8));
//        return sb.toString();
//    }
//
//    /**
//     * 获取固定长度id（医保区划编码+时间戳+唯一序列）
//     * @param seqName
//     * @param len
//     * @return
//     * @throws MbsException
//     */
//    public static String getFixStrId(String seqName,int len) throws MbsException {
//        StringBuffer sb = new StringBuffer();
//
//        //医保区划
//        if(ValidateUtil.isEmpty(areaCode)){
//            areaCode = WorkFlowUtil.getApplicationContext().getEnvironment().getProperty("areaCode");
//        }
//        sb.append(areaCode);
//
//        //时间戳
//        long timeMillis = System.currentTimeMillis();
//        sb.append(timeMillis);
//
//        //随机码
//        if (len<=19){
//            throw new MbsException(240101,"序列长度需大于19位");
//        } else {
//            long id = getId(seqName);
//            if(String.valueOf(id).length() + sb.length() > len){
//                throw new MbsException(240101,"序列："+seqName+"已达到最大值");
//            } else {
//                String s = String.format("%0" + (len - sb.length()) + "d", id);
//
//                return sb.append(s).toString();
//            }
//        }
//    }
//
//    /**
//     * 获取String型rid序列 根据传入的中台标识获取对应中台的RID
//     *  RID相关配置/规则：行政区划（6）+时间（YYYYMMDDhhmmss，14）+分组标识（预留，系统编号，2）+全局唯一序列（架构组，8）
//     * @return long
//     */
//    public static String getCerterRid(String groupId) {
//        StringBuffer sb = new StringBuffer(staticCommonProperties.getRid().getAdmdvs());
//        sb.append(DateUtil.getCurrentDate(DateUtil.TimeFormat.YYYY_MM_DD_HH_MM_SS_BUS)).append(groupId).append(getFixedLenId(SEQ_RID, 8));
//        return sb.toString();
//    }
//
//    /**
//     * 生成序列号：时间14位+序列号
//     * @param code
//     * @return
//     */
//    public static String getSeqWithTime(String code, int len) {
//        StringBuffer seqSN = new StringBuffer();
//        //时间戳
//        long timeMillis = DateTool.getCurrentDate_num14();
//        seqSN.append(timeMillis);
//        seqSN.append(IdGeneratorUtil.getFixedLenId(code, len));
//        return seqSN.toString();
//    }
//}
